const ejs = require('ejs');
const fs = require('fs');
/*
 * 复制目录、子目录，及其中的文件
 * @param src {String} 要复制的目录
 * @param dist {String} 复制到目标目录
 */
function copyDir(src, dist, answers, callback) {
  fs.access(dist, function(err){
    if(err){
      // 目录不存在时创建目录
      fs.mkdirSync(dist);
    }
    _copy(null, src, dist);
  });

  function _copy(err, src, dist) {
    if(err){
      callback(err);
    } else {
      fs.readdir(src, function(err, paths) {
        if(err){
          callback(err)
        } else {
          paths.forEach(function(path) {
            var _src = src + '/' +path;
            var _dist = dist + '/' +path.replace(/\.ejs$/, '').replace('fileName', answers.fileName);
            fs.stat(_src, function(err, stat) {
              if(err) throw err;
              // 判断是文件还是目录
              if(stat.isFile()) {
                ejs.renderFile(_src, answers, (err, result) => {
                  if (err) throw err;
                  // 将结果写入目标文件
                  fs.writeFileSync(_dist, result);
                })
              } else if(stat.isDirectory()) {
                // 当是目录是，递归复制
                copyDir(_src, _dist, answers, callback)
              }
            })
          })
        }
      })
    }
  }
}

module.exports = {
  copyDir
};